﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Web;
//using System.Web.UI;
//using System.Threading;
//using System.Threading.Tasks;
//using System.Web.UI.WebControls;
//using System.Web.Services;
//using Gollie.Mail;
//using MySQL.Db;

//namespace Gollie.Ajax
//{
//	public partial class Method : BaseForm
//	{
//		[WebMethod]
//		public static AjaxResult SendGollieCode(int userId)
//		{
//			AjaxResult ajaxResult = new AjaxResult { ErrorCode = 0, ErrorMessage = "" };
//			try
//			{


//				UserInfo userInfo = UserInfo.GetUserInfo(userId);

//				MailClient.Queue(new EMail
//				{
//					Name = "resendqrcode",
//					Recipients = userInfo.Email,
//					AttachmentPath = userInfo.QRCodePath,
//					Args = new Dictionary<string, string>()
//				{
//											{ "{aanhef}", userInfo.MailAanhef },
										    
//				}
//				});
//			}
//			catch (Exception e)
//			{
//				if (ajaxResult.ErrorCode == 0)
//					ajaxResult.ErrorCode = 99;

//				ajaxResult.ErrorMessage = e.Message;

//				logger.ErrorException("SendGollieCode error: ", e);
//			}
//			return ajaxResult;
//		}

//		[WebMethod]
//		public static int NewPassword(string userName, string newPassword)
//		{
//			return Database.Queries.NewPassword(userName, Hash.GetHash(newPassword));
//		}

//		[WebMethod]
//		public static PaymentInfo InitPayment(string userId, string cashierId)
//		{
//			var paymentInfo = PaymentInfo.InitPayment(userId, cashierId, null);

//			return paymentInfo;
//		}

//		[WebMethod]
//		public static AjaxResult Pay(string ticket, string suserId, string samount, string scredit, string scashierId, string pw, string email)
//		{
//			AjaxResult ajaxResult = new AjaxResult { ErrorCode = 0, ErrorMessage = "" };

//			try
//			{
//				string decodedCustomerId;
//				int customerId;

//				if (suserId.StartsWith("0000"))
//					decodedCustomerId = suserId;
//				else
//					decodedCustomerId = Hash.DescryptToString(Convert.FromBase64String(HttpUtility.UrlDecode(suserId)));

//				if (string.IsNullOrEmpty(decodedCustomerId) || decodedCustomerId.Length != 8 || int.TryParse(decodedCustomerId, out customerId) == false)
//				{
//					throw new Exception("Foutieve Gollie-code");
//				}

//				int cashierId = Convert.ToInt32(scashierId);

//				PaymentTicket pbTicket = new PaymentTicket(ticket);

//				if (pbTicket.IsValid((uint)customerId, (uint)cashierId) == false)
//				{
//					ajaxResult.ErrorCode = 10;
//					throw new Exception("Transactie verlopen. Start de procedure opnieuw.");
//				}

//				if (string.IsNullOrWhiteSpace(samount))
//				{
//					ajaxResult.ErrorCode = 11;
//					throw new Exception("Geen bedrag ingevuld");
//				}

//				decimal amount = GetDecimal(samount) / 100;
//				decimal credit = GetDecimal(scredit) / 100;

//				if (credit < amount)
//				{
//					ajaxResult.ErrorCode = 12;
//					throw new Exception(string.Format("Het beschikbare tegoed van {0:C} is kleiner dan het verschuldigde bedrag.\\r\\n>U kunt dit bedrag invullen en de klant verzoeken het restant van {1:C} op een andere wijze te voldoen.", credit, amount - credit));
//				}

//				string wwHash = Hash.GetHash(pw);

//				//Both are cached for sure! Already got them from InitPayment
//				UserInfo customerInfo = Database.Queries.GetUser(customerId, true);
//				UserInfo cashierInfo = Database.Queries.GetUser(cashierId, true);

//				logger.Info("Initializing payment of {0:C}, from {1} to {2}...", amount, customerInfo.FullName, cashierInfo.VendorInfo.BedrijfsNaam);
//				Database.Queries.Pay(customerInfo.Id, cashierInfo.VendorId, amount, cashierInfo.Id, wwHash);
//				DateTime payDate = DateTime.Now;
//				logger.Info("Succes!");

//				if (email == "1")
//				{
//					Task t = new Task(() => SendConfirmationMail(customerInfo, cashierInfo, amount, payDate));
//					t.Start();
//				}
//			}
//			catch (MySql.Data.MySqlClient.MySqlException sqlEx)
//			{
//				ajaxResult.ErrorCode = sqlEx.Number;
//				ajaxResult.ErrorMessage = MySqlErrorCodes.GetInstance().GetMessage(sqlEx);

//				logger.ErrorException("Payment database error: ", sqlEx);

//				if (sqlEx.Number == 255)
//					Global.HackAttempt();
//			}
//			catch (TicketException te)
//			{
//				if (ajaxResult.ErrorCode == 0)
//					ajaxResult.ErrorCode = 99;

//				ajaxResult.ErrorMessage = te.Message;

//				logger.ErrorException("Payment error, ticket exception ", te);
//			}
//			catch (Exception e)
//			{
//				if (ajaxResult.ErrorCode == 0)
//					ajaxResult.ErrorCode = 99;

//				ajaxResult.ErrorMessage = e.Message;

//				logger.ErrorException("Payment error: ", e);
//			}

//			return ajaxResult;
//		}

//		private static void SendConfirmationMail(UserInfo customerInfo, UserInfo cashierInfo, decimal amount, DateTime payDate)
//		{
//			Ticket reviewTicket = new Ticket();
//			reviewTicket.Push(cashierInfo.VendorId);
//			reviewTicket.Push(customerInfo.Id);
//			reviewTicket.Push(payDate);
//			reviewTicket.PushHash();
			
//			MailClient.Queue(new EMail
//			{
//				Name = "payed",
//				Recipients = customerInfo.Email,
//				Args = new Dictionary<string, string>()
//				{
//											{ "{amount}", ObjectFormatter.GetCurrencyString(amount) },
//											{ "{aanhef}", customerInfo.MailAanhef },
//											{ "{vendorname}", cashierInfo.VendorInfo.BedrijfsNaam },
//											{ "{vendorstreet}", cashierInfo.VendorInfo.Straat },
//											{ "{vendorcity}", cashierInfo.VendorInfo.Plaats },
//											{ "{timestamp}", ObjectFormatter.GetFormattedTimeStamp(payDate) },
//											{ "{reviewurl}", ConfigAppSettings.GetValue("ReviewUrl") },
//											{ "{reviewticket}", HttpUtility.UrlEncode(reviewTicket.ToString()) }
										    
//				}
//			});

//		}

//		private static decimal GetDecimal(string amount)
//		{
//			string s = amount.Replace('.', ',');
//			int commaCount = s.Count(p => p == ',');
//			if (commaCount > 1)
//				throw new FormatException("Incorrect bedrag");

//			decimal val;
//			if (decimal.TryParse(s, out val) == false)
//				throw new FormatException("Incorrect bedrag");

//			return val;
//		}

//		[WebMethod]
//		public static VendorLogin VendorLogin(string user, string ww)
//		{
//			return new VendorLogin(user, ww);
//		}

//		[WebMethod]
//		public static UserSaldi GetUserSaldi(string user)
//		{
//			logger.Debug("Enter GetUserSaldi");
//			return new UserSaldi(user);
//		}
//	}
//}